iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0
Vibe Coding

四個番茄鐘,三次重新來過:我跟 AI 的 30 天開發考古系列 第 6

Day 6|AI 把 Python 語法寫進 GDScript,三分鐘後爆掉了

  • 分享至 

  • xImage
  •  

這是用 Claude Code 開發後的第一個小時發生的

18:46 專案跑不起來

我請 AI 寫了 TimerManager.gd 剛進 repo,按下執行後,發現整個專案起不來:

執行專案發生錯誤 Parser Error: Could not parse global class "TimerManager" from "res://scripts/TimerManager.gd"。錯誤位置(3, 27)

Godot 的 parse error 很嚴格,一有語法錯誤,整個專案就會 Error。

原因是這一行:

_advance_state(count_as_completed: false)

這是 Python 的寫法。在 GDScript 裡,函式呼叫時加冒號會被當成型別宣告,直接解析失敗。
AI 寫這行的時候,大概是把它平常寫 Python 的習慣帶了過來,但這個語言不吃這一套。

18:47 我沒有叫它修,我叫它檢討

這裡我應用了當時學習到的技巧。我打的是:

請檢討為什麼會誤用 Python 風格的具名參數

不是「幫我修好」,是「檢討為什麼」。

差別在哪?「修好」得到的是一行程式碼,「檢討為什麼」得到的是一條規則。而規則可以套用到還沒發生的錯誤上。

18:47:43 它把教訓寫成了一個檔案

回應之後,Claude Code 在 ~/.claude/projects/ 底下建了一個記憶檔,內容如下:

GDScript 不支援具名參數(func(param: value)func(param=value))。在函式呼叫中加冒號會被解析為型別宣告,導致 Parser Error。

Why: 實際發生過 _advance_state(count_as_completed: false) 這樣的錯誤,導致 TimerManager 無法被 parse,整個專案啟動失敗。

How to apply: 寫 GDScript 函式呼叫時只用位置參數。若想讓意圖清楚,在同一行加 # 註解說明,或先用變數命名再傳入:

_advance_state(false) # 不計入完成數

18:49,修正進 repo(d5a8362),改動 4 行。

但當時還沒養成習慣

回頭查看 Sproutimer 整個專案就只有這一份記憶檔。

後面那些更值錢的教訓——透明視窗要三個設定一起開、embed_subwindows 一定要關、系統匣的坑——我都是當下解決完就走人,沒有留下任何東西。

證據是三個月後我做第四版番茄鐘,同樣的坑又在規劃文件裡被列成「風險」重新寫了一次。

帶走這個:兩句 prompt,把一次錯誤變成一條規則

第一句,在它修好 bug 之前/之後請記得多問一句:

請檢討為什麼會___

第二句,看完它的檢討之後:

把這個教訓寫成規則存起來,包含:為什麼會發生、以後遇到同類情況該怎麼做。

存下來的東西可以參考以下格式:

規則:GDScript 不支援具名參數
Why:實際發生過 _advance_state(count_as_completed: false),
     導致整個專案 parse 失敗
How to apply:函式呼叫只用位置參數;想讓意圖清楚就加 # 註解

「Why」那行不能省。 只寫結論的話,AI 遇到邊界情況不知道能不能變通;把原因寫進去,它才有辦法自己判斷。

明天講同一個晚上的另一半:透明視窗。它卡了我兩天,結果問題不再程式碼中。


上一篇
Day 5|一個 prompt 一個功能:我把 AI 當成打字比較快的自己
下一篇
Day 7|透明視窗卡了兩天,結果問題在專案設定
系列文
四個番茄鐘,三次重新來過:我跟 AI 的 30 天開發考古7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言